<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<meta name="theme-color" content="#222"><meta name="generator" content="Hexo 6.2.0">


  <link rel="apple-touch-icon" sizes="180x180" href="https://www.wulihub.com.cn/gc/Wez0VG/images/apple-touch-icon.png">
  <link rel="icon" type="image/png" sizes="32x32" href="https://www.wulihub.com.cn/gc/Wez0VG/images/favicon-32x32.png">
  <link rel="icon" type="image/png" sizes="16x16" href="https://www.wulihub.com.cn/gc/Wez0VG/images/favicon-16x16.png">
  <link rel="mask-icon" href="https://www.wulihub.com.cn/gc/Wez0VG/images/logo.svg" color="#222">

<link rel="stylesheet" href="https://www.wulihub.com.cn/gc/Wez0VG/css/main.css">



<link rel="stylesheet" href="https://npm.elemecdn.com/@fortawesome/fontawesome-free@6.1.1/css/all.min.css" integrity="sha256-DfWjNxDkM94fVBWx1H5BMMp0Zq7luBlV8QRcSES7s+0=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://npm.elemecdn.com/animate.css@3.1.1/animate.min.css" integrity="sha256-PR7ttpcvz8qrF57fur/yAx1qXMFJeJFiA6pSzWi0OIE=" crossorigin="anonymous">

<script class="next-config" data-name="main" type="application/json">{"hostname":"nobige.cn","root":"/","images":"https://www.wulihub.com.cn/gc/Wez0VG/images","scheme":"Gemini","darkmode":false,"version":"8.12.2","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12},"copycode":{"enable":false,"style":null},"bookmark":{"enable":false,"color":"#222","save":"auto"},"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"stickytabs":false,"motion":{"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"prism":false,"i18n":{"placeholder":"Searching...","empty":"We didn't find any results for the search: ${query}","hits_time":"${hits} results found in ${time} ms","hits":"${hits} results found"},"path":"/search.xml","localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false}}</script><script src="https://www.wulihub.com.cn/gc/Wez0VG/js/config.js"></script>

    <meta name="description" content="1、stackoverflow 单方法，能用，可以再优化  1234567async function md5(s) &amp;#123;  const msgUint8 &#x3D; new TextEncoder().encode(s) &#x2F;&#x2F; encode as (utf-8) Uint8Array  const hashBuffer &#x3D; await crypto.subtle.digest(&amp;#x27;MD">
<meta property="og:type" content="article">
<meta property="og:title" content="Cloudflare Workers 的哈希函数(md5,sha,crc32)">
<meta property="og:url" content="https://nobige.cn/post/20241107-Cloudflare_Workers_de_ha_xi_han_shu/index.html">
<meta property="og:site_name" content="NoBige-JackCh3n">
<meta property="og:description" content="1、stackoverflow 单方法，能用，可以再优化  1234567async function md5(s) &amp;#123;  const msgUint8 &#x3D; new TextEncoder().encode(s) &#x2F;&#x2F; encode as (utf-8) Uint8Array  const hashBuffer &#x3D; await crypto.subtle.digest(&amp;#x27;MD">
<meta property="og:locale" content="en_US">
<meta property="og:image" content="https://blog-static.nobige.cn/gh/JackCh3n/n0bige/post/20241107-Cloudflare_Workers_de_ha_xi_han_shu/samsung-memory-m587InP07os-unsplash.jpg">
<meta property="article:published_time" content="2024-11-07T01:49:11.000Z">
<meta property="article:modified_time" content="2024-11-07T02:59:06.334Z">
<meta property="article:author" content="JackCh3n">
<meta property="article:tag" content="cloudflare">
<meta property="article:tag" content="JavaScript">
<meta property="article:tag" content="哈希">
<meta property="article:tag" content="md5">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://blog-static.nobige.cn/gh/JackCh3n/n0bige/post/20241107-Cloudflare_Workers_de_ha_xi_han_shu/samsung-memory-m587InP07os-unsplash.jpg">


<link rel="canonical" href="https://nobige.cn/post/20241107-Cloudflare_Workers_de_ha_xi_han_shu/">



<script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":false,"isPost":true,"lang":"en","comments":true,"permalink":"https://nobige.cn/post/20241107-Cloudflare_Workers_de_ha_xi_han_shu/","path":"post/20241107-Cloudflare_Workers_de_ha_xi_han_shu/","title":"Cloudflare Workers 的哈希函数(md5,sha,crc32)"}</script>

<script class="next-config" data-name="calendar" type="application/json">""</script>
<title>Cloudflare Workers 的哈希函数(md5,sha,crc32) | NoBige-JackCh3n</title>
  
  <script class="next-config" data-name="google_analytics" type="application/json">{"tracking_id":"UA-122817633-1","only_pageview":true}</script>
  <script src="https://www.wulihub.com.cn/gc/Wez0VG/js/third-party/analytics/google-analytics.js"></script>

  <script src="https://www.wulihub.com.cn/gc/Wez0VG/js/third-party/analytics/baidu-analytics.js"></script>
  <script async src="https://hm.baidu.com/hm.js?96741f92c07d010c0ddd1d02197893e2"></script>




  <noscript>
    <link rel="stylesheet" href="https://www.wulihub.com.cn/gc/Wez0VG/css/noscript.css">
  </noscript>
</head>

<body itemscope itemtype="http://schema.org/WebPage" class="use-motion">
  <div class="headband"></div>

  <main class="main">
    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="Toggle navigation bar" role="button">
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <i class="logo-line"></i>
      <p class="site-title">NoBige-JackCh3n</p>
      <i class="logo-line"></i>
    </a>
      <p class="site-subtitle" itemprop="description">copy to my blog</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger">
        <i class="fa fa-search fa-fw fa-lg"></i>
    </div>
  </div>
</div>



<nav class="site-nav">
  <ul class="main-menu menu"><li class="menu-item menu-item-home"><a href="/" rel="section"><i class="home fa-fw"></i>Home</a></li><li class="menu-item menu-item-about"><a href="/about/" rel="section"><i class="user fa-fw"></i>About</a></li><li class="menu-item menu-item-tags"><a href="/tags/" rel="section"><i class="tags fa-fw"></i>Tags</a></li><li class="menu-item menu-item-categories"><a href="/categories/" rel="section"><i class="th fa-fw"></i>Categories</a></li><li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="archive fa-fw"></i>Archives</a></li><li class="menu-item menu-item-sitemap"><a href="/sitemap.xml" rel="section"><i class="sitemap fa-fw"></i>Sitemap</a></li>
      <li class="menu-item menu-item-search">
        <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>Search
        </a>
      </li>
  </ul>
</nav>



  <div class="search-pop-overlay">
    <div class="popup search-popup"><div class="search-header">
  <span class="search-icon">
    <i class="fa fa-search"></i>
  </span>
  <div class="search-input-container">
    <input autocomplete="off" autocapitalize="off" maxlength="80"
           placeholder="Searching..." spellcheck="false"
           type="search" class="search-input">
  </div>
  <span class="popup-btn-close" role="button">
    <i class="fa fa-times-circle"></i>
  </span>
</div>
<div class="search-result-container no-result">
  <div class="search-result-icon">
    <i class="fa fa-spinner fa-pulse fa-5x"></i>
  </div>
</div>

    </div>
  </div>

</div>
        
  
  <div class="toggle sidebar-toggle" role="button">
    <span class="toggle-line"></span>
    <span class="toggle-line"></span>
    <span class="toggle-line"></span>
  </div>

  <aside class="sidebar">

    <div class="sidebar-inner sidebar-nav-active sidebar-toc-active">
      <ul class="sidebar-nav">
        <li class="sidebar-nav-toc">
          Table of Contents
        </li>
        <li class="sidebar-nav-overview">
          Overview
        </li>
      </ul>

      <div class="sidebar-panel-container">
        <!--noindex-->
        <div class="post-toc-wrap sidebar-panel">
            <div class="post-toc animated"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#1%E3%80%81stackoverflow"><span class="nav-number">1.</span> <span class="nav-text">1、stackoverflow</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#2%E3%80%81github"><span class="nav-number">2.</span> <span class="nav-text">2、github</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#%E6%94%AF%E6%8C%81"><span class="nav-number">2.1.</span> <span class="nav-text">支持</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E4%BD%BF%E7%94%A8"><span class="nav-number">2.2.</span> <span class="nav-text">使用</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E4%BB%A3%E7%A0%81%E5%8F%82%E8%80%83"><span class="nav-number">2.3.</span> <span class="nav-text">代码参考</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#3%E3%80%81js-md5"><span class="nav-number">3.</span> <span class="nav-text">3、js-md5</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E5%8F%82%E8%80%83"><span class="nav-number">4.</span> <span class="nav-text">参考</span></a></li></ol></div>
        </div>
        <!--/noindex-->

        <div class="site-overview-wrap sidebar-panel">
          <div class="site-author site-overview-item animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="JackCh3n"
      src="https://www.wulihub.com.cn/gc/Wez0VG/images/avatar.png">
  <p class="site-author-name" itemprop="name">JackCh3n</p>
  <div class="site-description" itemprop="description">Record the pit filling process with words</div>
</div>
<div class="site-state-wrap site-overview-item animated">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
        <a href="/archives/">
          <span class="site-state-item-count">146</span>
          <span class="site-state-item-name">posts</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
          <a href="/categories/">
        <span class="site-state-item-count">42</span>
        <span class="site-state-item-name">categories</span></a>
      </div>
      <div class="site-state-item site-state-tags">
          <a href="/tags/">
        <span class="site-state-item-count">279</span>
        <span class="site-state-item-name">tags</span></a>
      </div>
  </nav>
</div>
  <div class="links-of-author site-overview-item animated">
      <span class="links-of-author-item">
        <a href="https://github.com/jackch3n" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;jackch3n" rel="noopener" target="_blank"><i class="github fa-fw"></i>GitHub</a>
      </span>
  </div>


  <div class="links-of-blogroll site-overview-item animated">
    <div class="links-of-blogroll-title"><i class="fa fa-globe fa-fw"></i>
      Links
    </div>
    <ul class="links-of-blogroll-list">
        <li class="links-of-blogroll-item">
          <a href="https://vercel.com/?f=nobige" title="https:&#x2F;&#x2F;vercel.com?f&#x3D;nobige" rel="noopener" target="_blank">vercel</a>
        </li>
        <li class="links-of-blogroll-item">
          <a href="https://www.jsdelivr.com/?f=nobige" title="https:&#x2F;&#x2F;www.jsdelivr.com?f&#x3D;nobige" rel="noopener" target="_blank">jsdelivr</a>
        </li>
        <li class="links-of-blogroll-item">
          <a href="https://www.upyun.com/?f=nobige" title="https:&#x2F;&#x2F;www.upyun.com?f&#x3D;nobige" rel="noopener" target="_blank">upyun</a>
        </li>
        <li class="links-of-blogroll-item">
          <a href="https://coding.net/?f=nobige" title="https:&#x2F;&#x2F;coding.net?f&#x3D;nobige" rel="noopener" target="_blank">coding</a>
        </li>
        <li class="links-of-blogroll-item">
          <a href="https://unsplash.com/?f=nobige" title="https:&#x2F;&#x2F;unsplash.com?f&#x3D;nobige" rel="noopener" target="_blank">unsplash</a>
        </li>
    </ul>
  </div>

        </div>
      </div>
    </div>
  </aside>
  <div class="sidebar-dimmer"></div>


    </header>

    
  <div class="back-to-top" role="button" aria-label="Back to top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>

<noscript>
  <div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
</noscript>


    <div class="main-inner post posts-expand">


  


<div class="post-block">
  
  

  <article itemscope itemtype="http://schema.org/Article" class="post-content" lang="en">
    <link itemprop="mainEntityOfPage" href="https://nobige.cn/post/20241107-Cloudflare_Workers_de_ha_xi_han_shu/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="https://www.wulihub.com.cn/gc/Wez0VG/images/avatar.png">
      <meta itemprop="name" content="JackCh3n">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="NoBige-JackCh3n">
      <meta itemprop="description" content="Record the pit filling process with words">
    </span>

    <span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
      <meta itemprop="name" content="Cloudflare Workers 的哈希函数(md5,sha,crc32) | NoBige-JackCh3n">
      <meta itemprop="description" content="">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          Cloudflare Workers 的哈希函数(md5,sha,crc32)
        </h1>

        <div class="post-meta-container">
          <div class="post-meta">
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-calendar"></i>
      </span>
      <span class="post-meta-item-text">Posted on</span>
      

      <time title="Created: 2024-11-07 09:49:11 / Modified: 10:59:06" itemprop="dateCreated datePublished" datetime="2024-11-07T09:49:11+08:00">2024-11-07</time>
    </span>
    <span class="post-meta-item">
      <span class="post-meta-item-icon">
        <i class="far fa-folder"></i>
      </span>
      <span class="post-meta-item-text">In</span>
        <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
          <a href="/categories/%E6%8A%80%E5%B7%A7/" itemprop="url" rel="index"><span itemprop="name">技巧</span></a>
        </span>
    </span>

  
    <span class="post-meta-item" title="Views" id="busuanzi_container_page_pv">
      <span class="post-meta-item-icon">
        <i class="far fa-eye"></i>
      </span>
      <span class="post-meta-item-text">Views: </span>
      <span id="busuanzi_value_page_pv"></span>
    </span>
</div>

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">
        <p><img src="https://blog-static.nobige.cn/gh/JackCh3n/n0bige/post/20241107-Cloudflare_Workers_de_ha_xi_han_shu/samsung-memory-m587InP07os-unsplash.jpg"></p>
<h2 id="1、stackoverflow"><a href="#1、stackoverflow" class="headerlink" title="1、stackoverflow"></a>1、stackoverflow</h2><blockquote>
<p>单方法，能用，可以再优化</p>
</blockquote>
<figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">md5</span>(<span class="params">s</span>) &#123;</span><br><span class="line">  <span class="keyword">const</span> msgUint8 = <span class="keyword">new</span> <span class="title class_">TextEncoder</span>().<span class="title function_">encode</span>(s) <span class="comment">// encode as (utf-8) Uint8Array</span></span><br><span class="line">  <span class="keyword">const</span> hashBuffer = <span class="keyword">await</span> crypto.<span class="property">subtle</span>.<span class="title function_">digest</span>(<span class="string">&#x27;MD5&#x27;</span>, msgUint8) <span class="comment">// hash the message</span></span><br><span class="line">  <span class="keyword">const</span> hashArray = <span class="title class_">Array</span>.<span class="title function_">from</span>(<span class="keyword">new</span> <span class="title class_">Uint8Array</span>(hashBuffer)) <span class="comment">// convert buffer to byte array</span></span><br><span class="line">  <span class="keyword">const</span> hashHex = hashArray.<span class="title function_">map</span>(<span class="function"><span class="params">b</span> =&gt;</span> b.<span class="title function_">toString</span>(<span class="number">16</span>).<span class="title function_">padStart</span>(<span class="number">2</span>, <span class="string">&#x27;0&#x27;</span>)).<span class="title function_">join</span>(<span class="string">&#x27;&#x27;</span>) <span class="comment">// convert bytes to hex string</span></span><br><span class="line">  <span class="keyword">return</span> hashHex</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<h2 id="2、github"><a href="#2、github" class="headerlink" title="2、github"></a>2、github</h2><ul>
<li><a target="_blank" rel="noopener" href="https://github.com/pigri/cf-workers-hash">https://github.com/pigri/cf-workers-hash</a></li>
</ul>
<blockquote>
<p><code>npm install cf-workers-hash</code></p>
</blockquote>
<h3 id="支持"><a href="#支持" class="headerlink" title="支持"></a>支持</h3><ul>
<li>SHA-1</li>
<li>SHA-256 </li>
<li>SHA-384 </li>
<li>SHA-512 </li>
<li>MD5 </li>
<li>BASE64 &#x2F; BASE64-DECODE</li>
<li>XXHASH32</li>
<li>XXHASH64</li>
<li>BCRYPT &#x2F; BCRYPT-COMPARE</li>
<li>WHIRLPOOL &#x2F; WHIRLPOOL-DECODE</li>
<li>SHA3-224</li>
<li>SHA3-256</li>
<li>SHA3-384</li>
<li>SHA3-512</li>
<li>KECCAK224</li>
<li>KECCAK256</li>
<li>KECCAK384</li>
<li>KECCAK512</li>
<li>MD6</li>
<li>CRC32</li>
<li>CRC32C</li>
</ul>
<h3 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> &#123; sha1, sha256, sha384, sha512, base64, base64Decode, md5, xxhash64, xxhash32, bcrypt, bcryptCompare, whirlpool, whirlpoolDecode, sha3_512, sha3_224, sha3_256, sha3_384, keccak512, keccak384, keccak256, keccak224, md6, crc32, crc32c &#125; <span class="keyword">from</span> <span class="string">&#x27;cf-workers-hash&#x27;</span>;</span><br><span class="line"><span class="keyword">await</span> <span class="title function_">sha1</span>(<span class="string">&#x27;test&#x27;</span>);</span><br><span class="line"><span class="keyword">await</span> <span class="title function_">md5</span>(<span class="string">&#x27;test&#x27;</span>);</span><br></pre></td></tr></table></figure>

<h3 id="代码参考"><a href="#代码参考" class="headerlink" title="代码参考"></a>代码参考</h3><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* @typescript-eslint/no-unused-functions */</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> * <span class="keyword">as</span> bcryptjs <span class="keyword">from</span> <span class="string">&#x27;bcryptjs&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> * <span class="keyword">as</span> xxh <span class="keyword">from</span> <span class="string">&#x27;xxhashjs&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> * <span class="keyword">as</span> whirlpooljs <span class="keyword">from</span> <span class="string">&#x27;whirlpool-hash&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> * <span class="keyword">as</span> sha3 <span class="keyword">from</span> <span class="string">&#x27;js-sha3&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> md6Hash <span class="keyword">from</span> <span class="string">&#x27;md6-hash&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">Crc32</span> &#125; <span class="keyword">from</span> <span class="string">&#x27;@aws-crypto/crc32&#x27;</span>;</span><br><span class="line"><span class="keyword">import</span> &#123; <span class="title class_">Crc32</span>c &#125; <span class="keyword">from</span> <span class="string">&#x27;@aws-crypto/crc32c&#x27;</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">cryptoHasher</span>(<span class="params">hashType: string</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="keyword">async</span> (<span class="attr">input</span>: string): <span class="title class_">Promise</span>&lt;string&gt; =&gt; &#123;</span><br><span class="line">    <span class="keyword">const</span> encoder = <span class="keyword">new</span> <span class="title class_">TextEncoder</span>();</span><br><span class="line">    <span class="keyword">const</span> data = encoder.<span class="title function_">encode</span>(input);</span><br><span class="line">    <span class="keyword">const</span> hashBuffer = <span class="keyword">await</span> crypto.<span class="property">subtle</span>.<span class="title function_">digest</span>(hashType, data);</span><br><span class="line">    <span class="keyword">const</span> hashArray = <span class="title class_">Array</span>.<span class="title function_">from</span>(<span class="keyword">new</span> <span class="title class_">Uint8Array</span>(hashBuffer));</span><br><span class="line">    <span class="keyword">return</span> hashArray.<span class="title function_">map</span>(<span class="function">(<span class="params">b</span>) =&gt;</span> b.<span class="title function_">toString</span>(<span class="number">16</span>).<span class="title function_">padStart</span>(<span class="number">2</span>, <span class="string">&#x27;0&#x27;</span>)).<span class="title function_">join</span>(<span class="string">&#x27;&#x27;</span>);</span><br><span class="line">  &#125;;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> <span class="title function_">base64</span>(<span class="params">input: string</span>): <span class="title class_">Promise</span>&lt;string&gt; &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(<span class="title function_">btoa</span>(input));</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> <span class="title function_">base64Decode</span>(<span class="params">input: string</span>): <span class="title class_">Promise</span>&lt;string&gt; &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(<span class="title function_">atob</span>(input));</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> sha1 = <span class="title function_">cryptoHasher</span>(<span class="string">&#x27;SHA-1&#x27;</span>);</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> sha256 = <span class="title function_">cryptoHasher</span>(<span class="string">&#x27;SHA-256&#x27;</span>);</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> sha384 = <span class="title function_">cryptoHasher</span>(<span class="string">&#x27;SHA-384&#x27;</span>);</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> sha512 = <span class="title function_">cryptoHasher</span>(<span class="string">&#x27;SHA-512&#x27;</span>);</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> md5 = <span class="title function_">cryptoHasher</span>(<span class="string">&#x27;MD5&#x27;</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">bcrypt</span>(<span class="params">input: string, saltRounds: number</span>): <span class="title class_">Promise</span>&lt;string&gt; &#123;</span><br><span class="line">  <span class="keyword">const</span> salt = <span class="keyword">await</span> bcryptjs.<span class="title function_">genSalt</span>(saltRounds);</span><br><span class="line">  <span class="keyword">return</span> <span class="keyword">await</span> bcryptjs.<span class="title function_">hash</span>(input, salt);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">xxhasher</span>(<span class="params">input: string, hashType: string</span>): <span class="title class_">Promise</span>&lt;string&gt; &#123;</span><br><span class="line">  <span class="keyword">const</span> seed = <span class="number">0xabcd</span>;</span><br><span class="line">  <span class="keyword">switch</span> (hashType) &#123;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;xxhash32&#x27;</span>:</span><br><span class="line">      <span class="keyword">return</span> <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(xxh.<span class="title function_">h32</span>(input, seed).<span class="title function_">toString</span>(<span class="number">16</span>));</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;xxhash64&#x27;</span>:</span><br><span class="line">      <span class="keyword">return</span> <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(xxh.<span class="title function_">h64</span>(input, seed).<span class="title function_">toString</span>(<span class="number">16</span>));</span><br><span class="line">    <span class="attr">default</span>:</span><br><span class="line">      <span class="keyword">return</span> <span class="title class_">Promise</span>.<span class="title function_">reject</span>(<span class="string">&#x27;Invalid hash type&#x27;</span>);</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> <span class="title function_">xxhash32</span>(<span class="params">input: string</span>): <span class="title class_">Promise</span>&lt;string&gt; &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="title function_">xxhasher</span>(input, <span class="string">&#x27;xxhash32&#x27;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">function</span> <span class="title function_">xxhash64</span>(<span class="params">input: string</span>): <span class="title class_">Promise</span>&lt;string&gt; &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="title function_">xxhasher</span>(input, <span class="string">&#x27;xxhash64&#x27;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">bcryptCompare</span>(<span class="params">input: string, hash: string</span>): <span class="title class_">Promise</span>&lt;boolean&gt; &#123;</span><br><span class="line">  <span class="keyword">return</span> bcryptjs.<span class="title function_">compare</span>(input, hash);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">whirlpool</span>(<span class="params">input: string</span>): <span class="title class_">Promise</span>&lt;string&gt; &#123;</span><br><span class="line">  <span class="keyword">const</span> hasher = <span class="keyword">new</span> whirlpooljs.<span class="title class_">Whirlpool</span>();</span><br><span class="line">  <span class="keyword">const</span> hash = hasher.<span class="title function_">getHash</span>(input)</span><br><span class="line">  <span class="keyword">return</span> <span class="title function_">base64</span>(whirlpooljs.<span class="property">encoders</span>.<span class="title function_">toHex</span>(hash.<span class="title function_">toString</span>()).<span class="title function_">toUpperCase</span>());</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">whirlpoolDecode</span>(<span class="params">input: string</span>): <span class="title class_">Promise</span>&lt;string&gt; &#123;</span><br><span class="line">  <span class="keyword">const</span> hasher = <span class="keyword">new</span> whirlpooljs.<span class="title class_">Whirlpool</span>();</span><br><span class="line">  <span class="keyword">return</span> whirlpooljs.<span class="property">encoders</span>.<span class="title function_">fromBase64</span>(input);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">md6</span>(<span class="params">input: string, size: number = <span class="number">256</span>, key: string = <span class="string">&quot;&quot;</span>, levels: number = <span class="number">64</span></span>): <span class="title class_">Promise</span>&lt;string&gt; &#123;</span><br><span class="line">  <span class="keyword">return</span> <span class="title function_">md6Hash</span>(input,size, key, levels)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">crc32</span>(<span class="params">input: string</span>): <span class="title class_">Promise</span>&lt;number&gt; &#123;</span><br><span class="line">  <span class="keyword">const</span> encoder = <span class="keyword">new</span> <span class="title class_">TextEncoder</span>();</span><br><span class="line">  <span class="keyword">const</span> data = encoder.<span class="title function_">encode</span>(input);</span><br><span class="line">  <span class="keyword">return</span> <span class="title class_">Promise</span>.<span class="title function_">resolve</span>((<span class="keyword">new</span> <span class="title class_">Crc32</span>()).<span class="title function_">update</span>(data).<span class="title function_">digest</span>());</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">async</span> <span class="keyword">function</span> <span class="title function_">crc32c</span>(<span class="params">input: string</span>): <span class="title class_">Promise</span>&lt;number&gt; &#123;</span><br><span class="line">  <span class="keyword">const</span> encoder = <span class="keyword">new</span> <span class="title class_">TextEncoder</span>();</span><br><span class="line">  <span class="keyword">const</span> data = encoder.<span class="title function_">encode</span>(input);</span><br><span class="line">  <span class="keyword">return</span> <span class="title class_">Promise</span>.<span class="title function_">resolve</span>((<span class="keyword">new</span> <span class="title class_">Crc32</span>c()).<span class="title function_">update</span>(data).<span class="title function_">digest</span>());</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> sha3_512 = (<span class="attr">input</span>: string): <span class="title class_">Promise</span>&lt;string&gt; =&gt; <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(sha3.<span class="title function_">sha3_512</span>(input));</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> sha3_224 = (<span class="attr">input</span>: string): <span class="title class_">Promise</span>&lt;string&gt; =&gt; <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(sha3.<span class="title function_">sha3_224</span>(input));</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> sha3_256 = (<span class="attr">input</span>: string): <span class="title class_">Promise</span>&lt;string&gt; =&gt; <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(sha3.<span class="title function_">sha3_256</span>(input));</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> sha3_384 = (<span class="attr">input</span>: string): <span class="title class_">Promise</span>&lt;string&gt; =&gt; <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(sha3.<span class="title function_">sha3_384</span>(input));</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> keccak512 = (<span class="attr">input</span>: string): <span class="title class_">Promise</span>&lt;string&gt; =&gt; <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(sha3.<span class="title function_">keccak512</span>(input));</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> keccak384 = (<span class="attr">input</span>: string): <span class="title class_">Promise</span>&lt;string&gt; =&gt; <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(sha3.<span class="title function_">keccak384</span>(input));</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> keccak256 = (<span class="attr">input</span>: string): <span class="title class_">Promise</span>&lt;string&gt; =&gt; <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(sha3.<span class="title function_">keccak256</span>(input));</span><br><span class="line"><span class="keyword">export</span> <span class="keyword">const</span> keccak224 = (<span class="attr">input</span>: string): <span class="title class_">Promise</span>&lt;string&gt; =&gt; <span class="title class_">Promise</span>.<span class="title function_">resolve</span>(sha3.<span class="title function_">keccak224</span>(input));</span><br></pre></td></tr></table></figure>

<h2 id="3、js-md5"><a href="#3、js-md5" class="headerlink" title="3、js-md5"></a>3、js-md5</h2><blockquote>
<p>直接粘贴进去就能用</p>
</blockquote>
<p><a target="_blank" rel="noopener" href="https://www.npmjs.com/package/js-md5">https://www.npmjs.com/package/js-md5</a></p>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1</span><span class="comment">/**</span></span><br><span class="line"><span class="comment">2 * [js-md5]&#123;<span class="doctag">@link</span> https://github.com/emn178/js-md5&#125;</span></span><br><span class="line"><span class="comment">3 *</span></span><br><span class="line"><span class="comment">4 * <span class="doctag">@namespace</span> <span class="variable">md5</span></span></span><br><span class="line"><span class="comment">5 * <span class="doctag">@version</span> 0.8.0</span></span><br><span class="line"><span class="comment">6 * <span class="doctag">@author</span> Chen, Yi-Cyuan [emn178<span class="doctag">@gmail</span>.com]</span></span><br><span class="line"><span class="comment">7 * <span class="doctag">@copyright</span> Chen, Yi-Cyuan 2014-2023</span></span><br><span class="line"><span class="comment">8 * <span class="doctag">@license</span> <span class="variable">MIT</span></span></span><br><span class="line"><span class="comment">9 */</span></span><br><span class="line"><span class="number">10</span>!<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="string">&quot;use strict&quot;</span>;<span class="keyword">function</span> <span class="title function_">t</span>(<span class="params">t</span>)&#123;<span class="keyword">if</span>(t)b[<span class="number">0</span>]=b[<span class="number">16</span>]=b[<span class="number">1</span>]=b[<span class="number">2</span>]=b[<span class="number">3</span>]=b[<span class="number">4</span>]=b[<span class="number">5</span>]=b[<span class="number">6</span>]=b[<span class="number">7</span>]=b[<span class="number">8</span>]=b[<span class="number">9</span>]=b[<span class="number">10</span>]=b[<span class="number">11</span>]=b[<span class="number">12</span>]=b[<span class="number">13</span>]=b[<span class="number">14</span>]=b[<span class="number">15</span>]=<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">blocks</span>=b,<span class="variable language_">this</span>.<span class="property">buffer8</span>=a;<span class="keyword">else</span> <span class="keyword">if</span>(u)&#123;<span class="keyword">var</span> r=<span class="keyword">new</span> <span class="title class_">ArrayBuffer</span>(<span class="number">68</span>);<span class="variable language_">this</span>.<span class="property">buffer8</span>=<span class="keyword">new</span> <span class="title class_">Uint8Array</span>(r),<span class="variable language_">this</span>.<span class="property">blocks</span>=<span class="keyword">new</span> <span class="title class_">Uint32Array</span>(r)&#125;<span class="keyword">else</span> <span class="variable language_">this</span>.<span class="property">blocks</span>=[<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>];<span class="variable language_">this</span>.<span class="property">h0</span>=<span class="variable language_">this</span>.<span class="property">h1</span>=<span class="variable language_">this</span>.<span class="property">h2</span>=<span class="variable language_">this</span>.<span class="property">h3</span>=<span class="variable language_">this</span>.<span class="property">start</span>=<span class="variable language_">this</span>.<span class="property">bytes</span>=<span class="variable language_">this</span>.<span class="property">hBytes</span>=<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">finalized</span>=<span class="variable language_">this</span>.<span class="property">hashed</span>=!<span class="number">1</span>,<span class="variable language_">this</span>.<span class="property">first</span>=!<span class="number">0</span>&#125;<span class="keyword">function</span> <span class="title function_">r</span>(<span class="params">r,e</span>)&#123;<span class="keyword">var</span> i,s=<span class="title function_">_</span>(r);<span class="keyword">if</span>(r=s[<span class="number">0</span>],s[<span class="number">1</span>])&#123;<span class="keyword">var</span> h,n=[],a=r.<span class="property">length</span>,o=<span class="number">0</span>;<span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;a;++i)(h=r.<span class="title function_">charCodeAt</span>(i))&lt;<span class="number">128</span>?n[o++]=<span class="attr">h</span>:h&lt;<span class="number">2048</span>?(n[o++]=<span class="number">192</span>|h&gt;&gt;&gt;<span class="number">6</span>,n[o++]=<span class="number">128</span>|<span class="number">63</span>&amp;h):h&lt;<span class="number">55296</span>||h&gt;=<span class="number">57344</span>?(n[o++]=<span class="number">224</span>|h&gt;&gt;&gt;<span class="number">12</span>,n[o++]=<span class="number">128</span>|h&gt;&gt;&gt;<span class="number">6</span>&amp;<span class="number">63</span>,n[o++]=<span class="number">128</span>|<span class="number">63</span>&amp;h):(h=<span class="number">65536</span>+((<span class="number">1023</span>&amp;h)&lt;&lt;<span class="number">10</span>|<span class="number">1023</span>&amp;r.<span class="title function_">charCodeAt</span>(++i)),n[o++]=<span class="number">240</span>|h&gt;&gt;&gt;<span class="number">18</span>,n[o++]=<span class="number">128</span>|h&gt;&gt;&gt;<span class="number">12</span>&amp;<span class="number">63</span>,n[o++]=<span class="number">128</span>|h&gt;&gt;&gt;<span class="number">6</span>&amp;<span class="number">63</span>,n[o++]=<span class="number">128</span>|<span class="number">63</span>&amp;h);r=n&#125;r.<span class="property">length</span>&gt;<span class="number">64</span>&amp;&amp;(r=<span class="keyword">new</span> <span class="title function_">t</span>(!<span class="number">0</span>).<span class="title function_">update</span>(r).<span class="title function_">array</span>());<span class="keyword">var</span> f=[],u=[];<span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;<span class="number">64</span>;++i)&#123;<span class="keyword">var</span> c=r[i]||<span class="number">0</span>;f[i]=<span class="number">92</span>^c,u[i]=<span class="number">54</span>^c&#125;t.<span class="title function_">call</span>(<span class="variable language_">this</span>,e),<span class="variable language_">this</span>.<span class="title function_">update</span>(u),<span class="variable language_">this</span>.<span class="property">oKeyPad</span>=f,<span class="variable language_">this</span>.<span class="property">inner</span>=!<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">sharedMemory</span>=e&#125;<span class="keyword">var</span> e=<span class="string">&quot;input is invalid type&quot;</span>,i=<span class="string">&quot;object&quot;</span>==<span class="keyword">typeof</span> <span class="variable language_">window</span>,s=i?<span class="attr">window</span>:&#123;&#125;;s.<span class="property">JS_MD5_NO_WINDOW</span>&amp;&amp;(i=!<span class="number">1</span>);<span class="keyword">var</span> h=!i&amp;&amp;<span class="string">&quot;object&quot;</span>==<span class="keyword">typeof</span> self,n=!s.<span class="property">JS_MD5_NO_NODE_JS</span>&amp;&amp;<span class="string">&quot;object&quot;</span>==<span class="keyword">typeof</span> process&amp;&amp;process.<span class="property">versions</span>&amp;&amp;process.<span class="property">versions</span>.<span class="property">node</span>;n?s=<span class="attr">global</span>:h&amp;&amp;(s=self);<span class="keyword">var</span> a,o=!s.<span class="property">JS_MD5_NO_COMMON_JS</span>&amp;&amp;<span class="string">&quot;object&quot;</span>==<span class="keyword">typeof</span> <span class="variable language_">module</span>&amp;&amp;<span class="variable language_">module</span>.<span class="property">exports</span>,f=<span class="string">&quot;function&quot;</span>==<span class="keyword">typeof</span> define&amp;&amp;define.<span class="property">amd</span>,u=!s.<span class="property">JS_MD5_NO_ARRAY_BUFFER</span>&amp;&amp;<span class="string">&quot;undefined&quot;</span>!=<span class="keyword">typeof</span> <span class="title class_">ArrayBuffer</span>,c=<span class="string">&quot;0123456789abcdef&quot;</span>.<span class="title function_">split</span>(<span class="string">&quot;&quot;</span>),y=[<span class="number">128</span>,<span class="number">32768</span>,<span class="number">8388608</span>,-<span class="number">2147483648</span>],p=[<span class="number">0</span>,<span class="number">8</span>,<span class="number">16</span>,<span class="number">24</span>],d=[<span class="string">&quot;hex&quot;</span>,<span class="string">&quot;array&quot;</span>,<span class="string">&quot;digest&quot;</span>,<span class="string">&quot;buffer&quot;</span>,<span class="string">&quot;arrayBuffer&quot;</span>,<span class="string">&quot;base64&quot;</span>],l=<span class="string">&quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;</span>.<span class="title function_">split</span>(<span class="string">&quot;&quot;</span>),b=[];<span class="keyword">if</span>(u)&#123;<span class="keyword">var</span> v=<span class="keyword">new</span> <span class="title class_">ArrayBuffer</span>(<span class="number">68</span>);a=<span class="keyword">new</span> <span class="title class_">Uint8Array</span>(v),b=<span class="keyword">new</span> <span class="title class_">Uint32Array</span>(v)&#125;<span class="keyword">var</span> w=<span class="title class_">Array</span>.<span class="property">isArray</span>;!s.<span class="property">JS_MD5_NO_NODE_JS</span>&amp;&amp;w||(w=<span class="keyword">function</span>(<span class="params">t</span>)&#123;<span class="keyword">return</span><span class="string">&quot;[object Array]&quot;</span>===<span class="title class_">Object</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">toString</span>.<span class="title function_">call</span>(t)&#125;);<span class="keyword">var</span> A=<span class="title class_">ArrayBuffer</span>.<span class="property">isView</span>;!u||!s.<span class="property">JS_MD5_NO_ARRAY_BUFFER_IS_VIEW</span>&amp;&amp;A||(A=<span class="keyword">function</span>(<span class="params">t</span>)&#123;<span class="keyword">return</span><span class="string">&quot;object&quot;</span>==<span class="keyword">typeof</span> t&amp;&amp;t.<span class="property">buffer</span>&amp;&amp;t.<span class="property">buffer</span>.<span class="property">constructor</span>===<span class="title class_">ArrayBuffer</span>&#125;);<span class="keyword">var</span> _=<span class="keyword">function</span>(<span class="params">t</span>)&#123;<span class="keyword">var</span> r=<span class="keyword">typeof</span> t;<span class="keyword">if</span>(<span class="string">&quot;string&quot;</span>===r)<span class="keyword">return</span>[t,!<span class="number">0</span>];<span class="keyword">if</span>(<span class="string">&quot;object&quot;</span>!==r||<span class="literal">null</span>===t)<span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">Error</span>(e);<span class="keyword">if</span>(u&amp;&amp;t.<span class="property">constructor</span>===<span class="title class_">ArrayBuffer</span>)<span class="keyword">return</span>[<span class="keyword">new</span> <span class="title class_">Uint8Array</span>(t),!<span class="number">1</span>];<span class="keyword">if</span>(!<span class="title function_">w</span>(t)&amp;&amp;!<span class="title function_">A</span>(t))<span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">Error</span>(e);<span class="keyword">return</span>[t,!<span class="number">1</span>]&#125;,B=<span class="keyword">function</span>(<span class="params">r</span>)&#123;<span class="keyword">return</span> <span class="keyword">function</span>(<span class="params">e</span>)&#123;<span class="keyword">return</span> <span class="keyword">new</span> <span class="title function_">t</span>(!<span class="number">0</span>).<span class="title function_">update</span>(e)[r]()&#125;&#125;,g=<span class="keyword">function</span>(<span class="params">t</span>)&#123;<span class="keyword">var</span> r,i=<span class="built_in">require</span>(<span class="string">&quot;crypto&quot;</span>),h=<span class="built_in">require</span>(<span class="string">&quot;buffer&quot;</span>).<span class="property">Buffer</span>;r=h.<span class="property">from</span>&amp;&amp;!s.<span class="property">JS_MD5_NO_BUFFER_FROM</span>?h.<span class="property">from</span>:<span class="keyword">function</span>(<span class="params">t</span>)&#123;<span class="keyword">return</span> <span class="keyword">new</span> <span class="title function_">h</span>(t)&#125;;<span class="keyword">return</span> <span class="keyword">function</span>(<span class="params">s</span>)&#123;<span class="keyword">if</span>(<span class="string">&quot;string&quot;</span>==<span class="keyword">typeof</span> s)<span class="keyword">return</span> i.<span class="title function_">createHash</span>(<span class="string">&quot;md5&quot;</span>).<span class="title function_">update</span>(s,<span class="string">&quot;utf8&quot;</span>).<span class="title function_">digest</span>(<span class="string">&quot;hex&quot;</span>);<span class="keyword">if</span>(<span class="literal">null</span>===s||<span class="keyword">void</span> <span class="number">0</span>===s)<span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">Error</span>(e);<span class="keyword">return</span> s.<span class="property">constructor</span>===<span class="title class_">ArrayBuffer</span>&amp;&amp;(s=<span class="keyword">new</span> <span class="title class_">Uint8Array</span>(s)),<span class="title function_">w</span>(s)||<span class="title function_">A</span>(s)||s.<span class="property">constructor</span>===h?i.<span class="title function_">createHash</span>(<span class="string">&quot;md5&quot;</span>).<span class="title function_">update</span>(<span class="title function_">r</span>(s)).<span class="title function_">digest</span>(<span class="string">&quot;hex&quot;</span>):<span class="title function_">t</span>(s)&#125;&#125;,m=<span class="keyword">function</span>(<span class="params">t</span>)&#123;<span class="keyword">return</span> <span class="keyword">function</span>(<span class="params">e,i</span>)&#123;<span class="keyword">return</span> <span class="keyword">new</span> <span class="title function_">r</span>(e,!<span class="number">0</span>).<span class="title function_">update</span>(i)[t]()&#125;&#125;;t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">update</span>=<span class="keyword">function</span>(<span class="params">t</span>)&#123;<span class="keyword">if</span>(<span class="variable language_">this</span>.<span class="property">finalized</span>)<span class="keyword">throw</span> <span class="keyword">new</span> <span class="title class_">Error</span>(<span class="string">&quot;finalize already called&quot;</span>);<span class="keyword">var</span> r=<span class="title function_">_</span>(t);t=r[<span class="number">0</span>];<span class="keyword">for</span>(<span class="keyword">var</span> e,i,s=r[<span class="number">1</span>],h=<span class="number">0</span>,n=t.<span class="property">length</span>,a=<span class="variable language_">this</span>.<span class="property">blocks</span>,o=<span class="variable language_">this</span>.<span class="property">buffer8</span>;h&lt;n;)&#123;<span class="keyword">if</span>(<span class="variable language_">this</span>.<span class="property">hashed</span>&amp;&amp;(<span class="variable language_">this</span>.<span class="property">hashed</span>=!<span class="number">1</span>,a[<span class="number">0</span>]=a[<span class="number">16</span>],a[<span class="number">16</span>]=a[<span class="number">1</span>]=a[<span class="number">2</span>]=a[<span class="number">3</span>]=a[<span class="number">4</span>]=a[<span class="number">5</span>]=a[<span class="number">6</span>]=a[<span class="number">7</span>]=a[<span class="number">8</span>]=a[<span class="number">9</span>]=a[<span class="number">10</span>]=a[<span class="number">11</span>]=a[<span class="number">12</span>]=a[<span class="number">13</span>]=a[<span class="number">14</span>]=a[<span class="number">15</span>]=<span class="number">0</span>),s)<span class="keyword">if</span>(u)<span class="keyword">for</span>(i=<span class="variable language_">this</span>.<span class="property">start</span>;h&lt;n&amp;&amp;i&lt;<span class="number">64</span>;++h)(e=t.<span class="title function_">charCodeAt</span>(h))&lt;<span class="number">128</span>?o[i++]=<span class="attr">e</span>:e&lt;<span class="number">2048</span>?(o[i++]=<span class="number">192</span>|e&gt;&gt;&gt;<span class="number">6</span>,o[i++]=<span class="number">128</span>|<span class="number">63</span>&amp;e):e&lt;<span class="number">55296</span>||e&gt;=<span class="number">57344</span>?(o[i++]=<span class="number">224</span>|e&gt;&gt;&gt;<span class="number">12</span>,o[i++]=<span class="number">128</span>|e&gt;&gt;&gt;<span class="number">6</span>&amp;<span class="number">63</span>,o[i++]=<span class="number">128</span>|<span class="number">63</span>&amp;e):(e=<span class="number">65536</span>+((<span class="number">1023</span>&amp;e)&lt;&lt;<span class="number">10</span>|<span class="number">1023</span>&amp;t.<span class="title function_">charCodeAt</span>(++h)),o[i++]=<span class="number">240</span>|e&gt;&gt;&gt;<span class="number">18</span>,o[i++]=<span class="number">128</span>|e&gt;&gt;&gt;<span class="number">12</span>&amp;<span class="number">63</span>,o[i++]=<span class="number">128</span>|e&gt;&gt;&gt;<span class="number">6</span>&amp;<span class="number">63</span>,o[i++]=<span class="number">128</span>|<span class="number">63</span>&amp;e);<span class="keyword">else</span> <span class="keyword">for</span>(i=<span class="variable language_">this</span>.<span class="property">start</span>;h&lt;n&amp;&amp;i&lt;<span class="number">64</span>;++h)(e=t.<span class="title function_">charCodeAt</span>(h))&lt;<span class="number">128</span>?a[i&gt;&gt;&gt;<span class="number">2</span>]|=e&lt;&lt;p[<span class="number">3</span>&amp;i++]:e&lt;<span class="number">2048</span>?(a[i&gt;&gt;&gt;<span class="number">2</span>]|=(<span class="number">192</span>|e&gt;&gt;&gt;<span class="number">6</span>)&lt;&lt;p[<span class="number">3</span>&amp;i++],a[i&gt;&gt;&gt;<span class="number">2</span>]|=(<span class="number">128</span>|<span class="number">63</span>&amp;e)&lt;&lt;p[<span class="number">3</span>&amp;i++]):e&lt;<span class="number">55296</span>||e&gt;=<span class="number">57344</span>?(a[i&gt;&gt;&gt;<span class="number">2</span>]|=(<span class="number">224</span>|e&gt;&gt;&gt;<span class="number">12</span>)&lt;&lt;p[<span class="number">3</span>&amp;i++],a[i&gt;&gt;&gt;<span class="number">2</span>]|=(<span class="number">128</span>|e&gt;&gt;&gt;<span class="number">6</span>&amp;<span class="number">63</span>)&lt;&lt;p[<span class="number">3</span>&amp;i++],a[i&gt;&gt;&gt;<span class="number">2</span>]|=(<span class="number">128</span>|<span class="number">63</span>&amp;e)&lt;&lt;p[<span class="number">3</span>&amp;i++]):(e=<span class="number">65536</span>+((<span class="number">1023</span>&amp;e)&lt;&lt;<span class="number">10</span>|<span class="number">1023</span>&amp;t.<span class="title function_">charCodeAt</span>(++h)),a[i&gt;&gt;&gt;<span class="number">2</span>]|=(<span class="number">240</span>|e&gt;&gt;&gt;<span class="number">18</span>)&lt;&lt;p[<span class="number">3</span>&amp;i++],a[i&gt;&gt;&gt;<span class="number">2</span>]|=(<span class="number">128</span>|e&gt;&gt;&gt;<span class="number">12</span>&amp;<span class="number">63</span>)&lt;&lt;p[<span class="number">3</span>&amp;i++],a[i&gt;&gt;&gt;<span class="number">2</span>]|=(<span class="number">128</span>|e&gt;&gt;&gt;<span class="number">6</span>&amp;<span class="number">63</span>)&lt;&lt;p[<span class="number">3</span>&amp;i++],a[i&gt;&gt;&gt;<span class="number">2</span>]|=(<span class="number">128</span>|<span class="number">63</span>&amp;e)&lt;&lt;p[<span class="number">3</span>&amp;i++]);<span class="keyword">else</span> <span class="keyword">if</span>(u)<span class="keyword">for</span>(i=<span class="variable language_">this</span>.<span class="property">start</span>;h&lt;n&amp;&amp;i&lt;<span class="number">64</span>;++h)o[i++]=t[h];<span class="keyword">else</span> <span class="keyword">for</span>(i=<span class="variable language_">this</span>.<span class="property">start</span>;h&lt;n&amp;&amp;i&lt;<span class="number">64</span>;++h)a[i&gt;&gt;&gt;<span class="number">2</span>]|=t[h]&lt;&lt;p[<span class="number">3</span>&amp;i++];<span class="variable language_">this</span>.<span class="property">lastByteIndex</span>=i,<span class="variable language_">this</span>.<span class="property">bytes</span>+=i-<span class="variable language_">this</span>.<span class="property">start</span>,i&gt;=<span class="number">64</span>?(<span class="variable language_">this</span>.<span class="property">start</span>=i-<span class="number">64</span>,<span class="variable language_">this</span>.<span class="title function_">hash</span>(),<span class="variable language_">this</span>.<span class="property">hashed</span>=!<span class="number">0</span>):<span class="variable language_">this</span>.<span class="property">start</span>=i&#125;<span class="keyword">return</span> <span class="variable language_">this</span>.<span class="property">bytes</span>&gt;<span class="number">4294967295</span>&amp;&amp;(<span class="variable language_">this</span>.<span class="property">hBytes</span>+=<span class="variable language_">this</span>.<span class="property">bytes</span>/<span class="number">4294967296</span>&lt;&lt;<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">bytes</span>=<span class="variable language_">this</span>.<span class="property">bytes</span>%<span class="number">4294967296</span>),<span class="variable language_">this</span>&#125;,t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">finalize</span>=<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="keyword">if</span>(!<span class="variable language_">this</span>.<span class="property">finalized</span>)&#123;<span class="variable language_">this</span>.<span class="property">finalized</span>=!<span class="number">0</span>;<span class="keyword">var</span> t=<span class="variable language_">this</span>.<span class="property">blocks</span>,r=<span class="variable language_">this</span>.<span class="property">lastByteIndex</span>;t[r&gt;&gt;&gt;<span class="number">2</span>]|=y[<span class="number">3</span>&amp;r],r&gt;=<span class="number">56</span>&amp;&amp;(<span class="variable language_">this</span>.<span class="property">hashed</span>||<span class="variable language_">this</span>.<span class="title function_">hash</span>(),t[<span class="number">0</span>]=t[<span class="number">16</span>],t[<span class="number">16</span>]=t[<span class="number">1</span>]=t[<span class="number">2</span>]=t[<span class="number">3</span>]=t[<span class="number">4</span>]=t[<span class="number">5</span>]=t[<span class="number">6</span>]=t[<span class="number">7</span>]=t[<span class="number">8</span>]=t[<span class="number">9</span>]=t[<span class="number">10</span>]=t[<span class="number">11</span>]=t[<span class="number">12</span>]=t[<span class="number">13</span>]=t[<span class="number">14</span>]=t[<span class="number">15</span>]=<span class="number">0</span>),t[<span class="number">14</span>]=<span class="variable language_">this</span>.<span class="property">bytes</span>&lt;&lt;<span class="number">3</span>,t[<span class="number">15</span>]=<span class="variable language_">this</span>.<span class="property">hBytes</span>&lt;&lt;<span class="number">3</span>|<span class="variable language_">this</span>.<span class="property">bytes</span>&gt;&gt;&gt;<span class="number">29</span>,<span class="variable language_">this</span>.<span class="title function_">hash</span>()&#125;&#125;,t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">hash</span>=<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="keyword">var</span> t,r,e,i,s,h,n=<span class="variable language_">this</span>.<span class="property">blocks</span>;<span class="variable language_">this</span>.<span class="property">first</span>?r=((r=((t=((t=n[<span class="number">0</span>]-<span class="number">680876937</span>)&lt;&lt;<span class="number">7</span>|t&gt;&gt;&gt;<span class="number">25</span>)-<span class="number">271733879</span>&lt;&lt;<span class="number">0</span>)^(e=((e=(-<span class="number">271733879</span>^(i=((i=(-<span class="number">1732584194</span>^<span class="number">2004318071</span>&amp;t)+n[<span class="number">1</span>]-<span class="number">117830708</span>)&lt;&lt;<span class="number">12</span>|i&gt;&gt;&gt;<span class="number">20</span>)+t&lt;&lt;<span class="number">0</span>)&amp;(-<span class="number">271733879</span>^t))+n[<span class="number">2</span>]-<span class="number">1126478375</span>)&lt;&lt;<span class="number">17</span>|e&gt;&gt;&gt;<span class="number">15</span>)+i&lt;&lt;<span class="number">0</span>)&amp;(i^t))+n[<span class="number">3</span>]-<span class="number">1316259209</span>)&lt;&lt;<span class="number">22</span>|r&gt;&gt;&gt;<span class="number">10</span>)+e&lt;&lt;<span class="number">0</span>:(t=<span class="variable language_">this</span>.<span class="property">h0</span>,r=<span class="variable language_">this</span>.<span class="property">h1</span>,e=<span class="variable language_">this</span>.<span class="property">h2</span>,r=((r+=((t=((t+=((i=<span class="variable language_">this</span>.<span class="property">h3</span>)^r&amp;(e^i))+n[<span class="number">0</span>]-<span class="number">680876936</span>)&lt;&lt;<span class="number">7</span>|t&gt;&gt;&gt;<span class="number">25</span>)+r&lt;&lt;<span class="number">0</span>)^(e=((e+=(r^(i=((i+=(e^t&amp;(r^e))+n[<span class="number">1</span>]-<span class="number">389564586</span>)&lt;&lt;<span class="number">12</span>|i&gt;&gt;&gt;<span class="number">20</span>)+t&lt;&lt;<span class="number">0</span>)&amp;(t^r))+n[<span class="number">2</span>]+<span class="number">606105819</span>)&lt;&lt;<span class="number">17</span>|e&gt;&gt;&gt;<span class="number">15</span>)+i&lt;&lt;<span class="number">0</span>)&amp;(i^t))+n[<span class="number">3</span>]-<span class="number">1044525330</span>)&lt;&lt;<span class="number">22</span>|r&gt;&gt;&gt;<span class="number">10</span>)+e&lt;&lt;<span class="number">0</span>),r=((r+=((t=((t+=(i^r&amp;(e^i))+n[<span class="number">4</span>]-<span class="number">176418897</span>)&lt;&lt;<span class="number">7</span>|t&gt;&gt;&gt;<span class="number">25</span>)+r&lt;&lt;<span class="number">0</span>)^(e=((e+=(r^(i=((i+=(e^t&amp;(r^e))+n[<span class="number">5</span>]+<span class="number">1200080426</span>)&lt;&lt;<span class="number">12</span>|i&gt;&gt;&gt;<span class="number">20</span>)+t&lt;&lt;<span class="number">0</span>)&amp;(t^r))+n[<span class="number">6</span>]-<span class="number">1473231341</span>)&lt;&lt;<span class="number">17</span>|e&gt;&gt;&gt;<span class="number">15</span>)+i&lt;&lt;<span class="number">0</span>)&amp;(i^t))+n[<span class="number">7</span>]-<span class="number">45705983</span>)&lt;&lt;<span class="number">22</span>|r&gt;&gt;&gt;<span class="number">10</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((t=((t+=(i^r&amp;(e^i))+n[<span class="number">8</span>]+<span class="number">1770035416</span>)&lt;&lt;<span class="number">7</span>|t&gt;&gt;&gt;<span class="number">25</span>)+r&lt;&lt;<span class="number">0</span>)^(e=((e+=(r^(i=((i+=(e^t&amp;(r^e))+n[<span class="number">9</span>]-<span class="number">1958414417</span>)&lt;&lt;<span class="number">12</span>|i&gt;&gt;&gt;<span class="number">20</span>)+t&lt;&lt;<span class="number">0</span>)&amp;(t^r))+n[<span class="number">10</span>]-<span class="number">42063</span>)&lt;&lt;<span class="number">17</span>|e&gt;&gt;&gt;<span class="number">15</span>)+i&lt;&lt;<span class="number">0</span>)&amp;(i^t))+n[<span class="number">11</span>]-<span class="number">1990404162</span>)&lt;&lt;<span class="number">22</span>|r&gt;&gt;&gt;<span class="number">10</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((t=((t+=(i^r&amp;(e^i))+n[<span class="number">12</span>]+<span class="number">1804603682</span>)&lt;&lt;<span class="number">7</span>|t&gt;&gt;&gt;<span class="number">25</span>)+r&lt;&lt;<span class="number">0</span>)^(e=((e+=(r^(i=((i+=(e^t&amp;(r^e))+n[<span class="number">13</span>]-<span class="number">40341101</span>)&lt;&lt;<span class="number">12</span>|i&gt;&gt;&gt;<span class="number">20</span>)+t&lt;&lt;<span class="number">0</span>)&amp;(t^r))+n[<span class="number">14</span>]-<span class="number">1502002290</span>)&lt;&lt;<span class="number">17</span>|e&gt;&gt;&gt;<span class="number">15</span>)+i&lt;&lt;<span class="number">0</span>)&amp;(i^t))+n[<span class="number">15</span>]+<span class="number">1236535329</span>)&lt;&lt;<span class="number">22</span>|r&gt;&gt;&gt;<span class="number">10</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((i=((i+=(r^e&amp;((t=((t+=(e^i&amp;(r^e))+n[<span class="number">1</span>]-<span class="number">165796510</span>)&lt;&lt;<span class="number">5</span>|t&gt;&gt;&gt;<span class="number">27</span>)+r&lt;&lt;<span class="number">0</span>)^r))+n[<span class="number">6</span>]-<span class="number">1069501632</span>)&lt;&lt;<span class="number">9</span>|i&gt;&gt;&gt;<span class="number">23</span>)+t&lt;&lt;<span class="number">0</span>)^t&amp;((e=((e+=(t^r&amp;(i^t))+n[<span class="number">11</span>]+<span class="number">643717713</span>)&lt;&lt;<span class="number">14</span>|e&gt;&gt;&gt;<span class="number">18</span>)+i&lt;&lt;<span class="number">0</span>)^i))+n[<span class="number">0</span>]-<span class="number">373897302</span>)&lt;&lt;<span class="number">20</span>|r&gt;&gt;&gt;<span class="number">12</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((i=((i+=(r^e&amp;((t=((t+=(e^i&amp;(r^e))+n[<span class="number">5</span>]-<span class="number">701558691</span>)&lt;&lt;<span class="number">5</span>|t&gt;&gt;&gt;<span class="number">27</span>)+r&lt;&lt;<span class="number">0</span>)^r))+n[<span class="number">10</span>]+<span class="number">38016083</span>)&lt;&lt;<span class="number">9</span>|i&gt;&gt;&gt;<span class="number">23</span>)+t&lt;&lt;<span class="number">0</span>)^t&amp;((e=((e+=(t^r&amp;(i^t))+n[<span class="number">15</span>]-<span class="number">660478335</span>)&lt;&lt;<span class="number">14</span>|e&gt;&gt;&gt;<span class="number">18</span>)+i&lt;&lt;<span class="number">0</span>)^i))+n[<span class="number">4</span>]-<span class="number">405537848</span>)&lt;&lt;<span class="number">20</span>|r&gt;&gt;&gt;<span class="number">12</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((i=((i+=(r^e&amp;((t=((t+=(e^i&amp;(r^e))+n[<span class="number">9</span>]+<span class="number">568446438</span>)&lt;&lt;<span class="number">5</span>|t&gt;&gt;&gt;<span class="number">27</span>)+r&lt;&lt;<span class="number">0</span>)^r))+n[<span class="number">14</span>]-<span class="number">1019803690</span>)&lt;&lt;<span class="number">9</span>|i&gt;&gt;&gt;<span class="number">23</span>)+t&lt;&lt;<span class="number">0</span>)^t&amp;((e=((e+=(t^r&amp;(i^t))+n[<span class="number">3</span>]-<span class="number">187363961</span>)&lt;&lt;<span class="number">14</span>|e&gt;&gt;&gt;<span class="number">18</span>)+i&lt;&lt;<span class="number">0</span>)^i))+n[<span class="number">8</span>]+<span class="number">1163531501</span>)&lt;&lt;<span class="number">20</span>|r&gt;&gt;&gt;<span class="number">12</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((i=((i+=(r^e&amp;((t=((t+=(e^i&amp;(r^e))+n[<span class="number">13</span>]-<span class="number">1444681467</span>)&lt;&lt;<span class="number">5</span>|t&gt;&gt;&gt;<span class="number">27</span>)+r&lt;&lt;<span class="number">0</span>)^r))+n[<span class="number">2</span>]-<span class="number">51403784</span>)&lt;&lt;<span class="number">9</span>|i&gt;&gt;&gt;<span class="number">23</span>)+t&lt;&lt;<span class="number">0</span>)^t&amp;((e=((e+=(t^r&amp;(i^t))+n[<span class="number">7</span>]+<span class="number">1735328473</span>)&lt;&lt;<span class="number">14</span>|e&gt;&gt;&gt;<span class="number">18</span>)+i&lt;&lt;<span class="number">0</span>)^i))+n[<span class="number">12</span>]-<span class="number">1926607734</span>)&lt;&lt;<span class="number">20</span>|r&gt;&gt;&gt;<span class="number">12</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((h=(i=((i+=((s=r^e)^(t=((t+=(s^i)+n[<span class="number">5</span>]-<span class="number">378558</span>)&lt;&lt;<span class="number">4</span>|t&gt;&gt;&gt;<span class="number">28</span>)+r&lt;&lt;<span class="number">0</span>))+n[<span class="number">8</span>]-<span class="number">2022574463</span>)&lt;&lt;<span class="number">11</span>|i&gt;&gt;&gt;<span class="number">21</span>)+t&lt;&lt;<span class="number">0</span>)^t)^(e=((e+=(h^r)+n[<span class="number">11</span>]+<span class="number">1839030562</span>)&lt;&lt;<span class="number">16</span>|e&gt;&gt;&gt;<span class="number">16</span>)+i&lt;&lt;<span class="number">0</span>))+n[<span class="number">14</span>]-<span class="number">35309556</span>)&lt;&lt;<span class="number">23</span>|r&gt;&gt;&gt;<span class="number">9</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((h=(i=((i+=((s=r^e)^(t=((t+=(s^i)+n[<span class="number">1</span>]-<span class="number">1530992060</span>)&lt;&lt;<span class="number">4</span>|t&gt;&gt;&gt;<span class="number">28</span>)+r&lt;&lt;<span class="number">0</span>))+n[<span class="number">4</span>]+<span class="number">1272893353</span>)&lt;&lt;<span class="number">11</span>|i&gt;&gt;&gt;<span class="number">21</span>)+t&lt;&lt;<span class="number">0</span>)^t)^(e=((e+=(h^r)+n[<span class="number">7</span>]-<span class="number">155497632</span>)&lt;&lt;<span class="number">16</span>|e&gt;&gt;&gt;<span class="number">16</span>)+i&lt;&lt;<span class="number">0</span>))+n[<span class="number">10</span>]-<span class="number">1094730640</span>)&lt;&lt;<span class="number">23</span>|r&gt;&gt;&gt;<span class="number">9</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((h=(i=((i+=((s=r^e)^(t=((t+=(s^i)+n[<span class="number">13</span>]+<span class="number">681279174</span>)&lt;&lt;<span class="number">4</span>|t&gt;&gt;&gt;<span class="number">28</span>)+r&lt;&lt;<span class="number">0</span>))+n[<span class="number">0</span>]-<span class="number">358537222</span>)&lt;&lt;<span class="number">11</span>|i&gt;&gt;&gt;<span class="number">21</span>)+t&lt;&lt;<span class="number">0</span>)^t)^(e=((e+=(h^r)+n[<span class="number">3</span>]-<span class="number">722521979</span>)&lt;&lt;<span class="number">16</span>|e&gt;&gt;&gt;<span class="number">16</span>)+i&lt;&lt;<span class="number">0</span>))+n[<span class="number">6</span>]+<span class="number">76029189</span>)&lt;&lt;<span class="number">23</span>|r&gt;&gt;&gt;<span class="number">9</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((h=(i=((i+=((s=r^e)^(t=((t+=(s^i)+n[<span class="number">9</span>]-<span class="number">640364487</span>)&lt;&lt;<span class="number">4</span>|t&gt;&gt;&gt;<span class="number">28</span>)+r&lt;&lt;<span class="number">0</span>))+n[<span class="number">12</span>]-<span class="number">421815835</span>)&lt;&lt;<span class="number">11</span>|i&gt;&gt;&gt;<span class="number">21</span>)+t&lt;&lt;<span class="number">0</span>)^t)^(e=((e+=(h^r)+n[<span class="number">15</span>]+<span class="number">530742520</span>)&lt;&lt;<span class="number">16</span>|e&gt;&gt;&gt;<span class="number">16</span>)+i&lt;&lt;<span class="number">0</span>))+n[<span class="number">2</span>]-<span class="number">995338651</span>)&lt;&lt;<span class="number">23</span>|r&gt;&gt;&gt;<span class="number">9</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((i=((i+=(r^((t=((t+=(e^(r|~i))+n[<span class="number">0</span>]-<span class="number">198630844</span>)&lt;&lt;<span class="number">6</span>|t&gt;&gt;&gt;<span class="number">26</span>)+r&lt;&lt;<span class="number">0</span>)|~e))+n[<span class="number">7</span>]+<span class="number">1126891415</span>)&lt;&lt;<span class="number">10</span>|i&gt;&gt;&gt;<span class="number">22</span>)+t&lt;&lt;<span class="number">0</span>)^((e=((e+=(t^(i|~r))+n[<span class="number">14</span>]-<span class="number">1416354905</span>)&lt;&lt;<span class="number">15</span>|e&gt;&gt;&gt;<span class="number">17</span>)+i&lt;&lt;<span class="number">0</span>)|~t))+n[<span class="number">5</span>]-<span class="number">57434055</span>)&lt;&lt;<span class="number">21</span>|r&gt;&gt;&gt;<span class="number">11</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((i=((i+=(r^((t=((t+=(e^(r|~i))+n[<span class="number">12</span>]+<span class="number">1700485571</span>)&lt;&lt;<span class="number">6</span>|t&gt;&gt;&gt;<span class="number">26</span>)+r&lt;&lt;<span class="number">0</span>)|~e))+n[<span class="number">3</span>]-<span class="number">1894986606</span>)&lt;&lt;<span class="number">10</span>|i&gt;&gt;&gt;<span class="number">22</span>)+t&lt;&lt;<span class="number">0</span>)^((e=((e+=(t^(i|~r))+n[<span class="number">10</span>]-<span class="number">1051523</span>)&lt;&lt;<span class="number">15</span>|e&gt;&gt;&gt;<span class="number">17</span>)+i&lt;&lt;<span class="number">0</span>)|~t))+n[<span class="number">1</span>]-<span class="number">2054922799</span>)&lt;&lt;<span class="number">21</span>|r&gt;&gt;&gt;<span class="number">11</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((i=((i+=(r^((t=((t+=(e^(r|~i))+n[<span class="number">8</span>]+<span class="number">1873313359</span>)&lt;&lt;<span class="number">6</span>|t&gt;&gt;&gt;<span class="number">26</span>)+r&lt;&lt;<span class="number">0</span>)|~e))+n[<span class="number">15</span>]-<span class="number">30611744</span>)&lt;&lt;<span class="number">10</span>|i&gt;&gt;&gt;<span class="number">22</span>)+t&lt;&lt;<span class="number">0</span>)^((e=((e+=(t^(i|~r))+n[<span class="number">6</span>]-<span class="number">1560198380</span>)&lt;&lt;<span class="number">15</span>|e&gt;&gt;&gt;<span class="number">17</span>)+i&lt;&lt;<span class="number">0</span>)|~t))+n[<span class="number">13</span>]+<span class="number">1309151649</span>)&lt;&lt;<span class="number">21</span>|r&gt;&gt;&gt;<span class="number">11</span>)+e&lt;&lt;<span class="number">0</span>,r=((r+=((i=((i+=(r^((t=((t+=(e^(r|~i))+n[<span class="number">4</span>]-<span class="number">145523070</span>)&lt;&lt;<span class="number">6</span>|t&gt;&gt;&gt;<span class="number">26</span>)+r&lt;&lt;<span class="number">0</span>)|~e))+n[<span class="number">11</span>]-<span class="number">1120210379</span>)&lt;&lt;<span class="number">10</span>|i&gt;&gt;&gt;<span class="number">22</span>)+t&lt;&lt;<span class="number">0</span>)^((e=((e+=(t^(i|~r))+n[<span class="number">2</span>]+<span class="number">718787259</span>)&lt;&lt;<span class="number">15</span>|e&gt;&gt;&gt;<span class="number">17</span>)+i&lt;&lt;<span class="number">0</span>)|~t))+n[<span class="number">9</span>]-<span class="number">343485551</span>)&lt;&lt;<span class="number">21</span>|r&gt;&gt;&gt;<span class="number">11</span>)+e&lt;&lt;<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">first</span>?(<span class="variable language_">this</span>.<span class="property">h0</span>=t+<span class="number">1732584193</span>&lt;&lt;<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">h1</span>=r-<span class="number">271733879</span>&lt;&lt;<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">h2</span>=e-<span class="number">1732584194</span>&lt;&lt;<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">h3</span>=i+<span class="number">271733878</span>&lt;&lt;<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">first</span>=!<span class="number">1</span>):(<span class="variable language_">this</span>.<span class="property">h0</span>=<span class="variable language_">this</span>.<span class="property">h0</span>+t&lt;&lt;<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">h1</span>=<span class="variable language_">this</span>.<span class="property">h1</span>+r&lt;&lt;<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">h2</span>=<span class="variable language_">this</span>.<span class="property">h2</span>+e&lt;&lt;<span class="number">0</span>,<span class="variable language_">this</span>.<span class="property">h3</span>=<span class="variable language_">this</span>.<span class="property">h3</span>+i&lt;&lt;<span class="number">0</span>)&#125;,t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">hex</span>=<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="variable language_">this</span>.<span class="title function_">finalize</span>();<span class="keyword">var</span> t=<span class="variable language_">this</span>.<span class="property">h0</span>,r=<span class="variable language_">this</span>.<span class="property">h1</span>,e=<span class="variable language_">this</span>.<span class="property">h2</span>,i=<span class="variable language_">this</span>.<span class="property">h3</span>;<span class="keyword">return</span> c[t&gt;&gt;&gt;<span class="number">4</span>&amp;<span class="number">15</span>]+c[<span class="number">15</span>&amp;t]+c[t&gt;&gt;&gt;<span class="number">12</span>&amp;<span class="number">15</span>]+c[t&gt;&gt;&gt;<span class="number">8</span>&amp;<span class="number">15</span>]+c[t&gt;&gt;&gt;<span class="number">20</span>&amp;<span class="number">15</span>]+c[t&gt;&gt;&gt;<span class="number">16</span>&amp;<span class="number">15</span>]+c[t&gt;&gt;&gt;<span class="number">28</span>&amp;<span class="number">15</span>]+c[t&gt;&gt;&gt;<span class="number">24</span>&amp;<span class="number">15</span>]+c[r&gt;&gt;&gt;<span class="number">4</span>&amp;<span class="number">15</span>]+c[<span class="number">15</span>&amp;r]+c[r&gt;&gt;&gt;<span class="number">12</span>&amp;<span class="number">15</span>]+c[r&gt;&gt;&gt;<span class="number">8</span>&amp;<span class="number">15</span>]+c[r&gt;&gt;&gt;<span class="number">20</span>&amp;<span class="number">15</span>]+c[r&gt;&gt;&gt;<span class="number">16</span>&amp;<span class="number">15</span>]+c[r&gt;&gt;&gt;<span class="number">28</span>&amp;<span class="number">15</span>]+c[r&gt;&gt;&gt;<span class="number">24</span>&amp;<span class="number">15</span>]+c[e&gt;&gt;&gt;<span class="number">4</span>&amp;<span class="number">15</span>]+c[<span class="number">15</span>&amp;e]+c[e&gt;&gt;&gt;<span class="number">12</span>&amp;<span class="number">15</span>]+c[e&gt;&gt;&gt;<span class="number">8</span>&amp;<span class="number">15</span>]+c[e&gt;&gt;&gt;<span class="number">20</span>&amp;<span class="number">15</span>]+c[e&gt;&gt;&gt;<span class="number">16</span>&amp;<span class="number">15</span>]+c[e&gt;&gt;&gt;<span class="number">28</span>&amp;<span class="number">15</span>]+c[e&gt;&gt;&gt;<span class="number">24</span>&amp;<span class="number">15</span>]+c[i&gt;&gt;&gt;<span class="number">4</span>&amp;<span class="number">15</span>]+c[<span class="number">15</span>&amp;i]+c[i&gt;&gt;&gt;<span class="number">12</span>&amp;<span class="number">15</span>]+c[i&gt;&gt;&gt;<span class="number">8</span>&amp;<span class="number">15</span>]+c[i&gt;&gt;&gt;<span class="number">20</span>&amp;<span class="number">15</span>]+c[i&gt;&gt;&gt;<span class="number">16</span>&amp;<span class="number">15</span>]+c[i&gt;&gt;&gt;<span class="number">28</span>&amp;<span class="number">15</span>]+c[i&gt;&gt;&gt;<span class="number">24</span>&amp;<span class="number">15</span>]&#125;,t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">toString</span>=t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">hex</span>,t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">digest</span>=<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="variable language_">this</span>.<span class="title function_">finalize</span>();<span class="keyword">var</span> t=<span class="variable language_">this</span>.<span class="property">h0</span>,r=<span class="variable language_">this</span>.<span class="property">h1</span>,e=<span class="variable language_">this</span>.<span class="property">h2</span>,i=<span class="variable language_">this</span>.<span class="property">h3</span>;<span class="keyword">return</span>[<span class="number">255</span>&amp;t,t&gt;&gt;&gt;<span class="number">8</span>&amp;<span class="number">255</span>,t&gt;&gt;&gt;<span class="number">16</span>&amp;<span class="number">255</span>,t&gt;&gt;&gt;<span class="number">24</span>&amp;<span class="number">255</span>,<span class="number">255</span>&amp;r,r&gt;&gt;&gt;<span class="number">8</span>&amp;<span class="number">255</span>,r&gt;&gt;&gt;<span class="number">16</span>&amp;<span class="number">255</span>,r&gt;&gt;&gt;<span class="number">24</span>&amp;<span class="number">255</span>,<span class="number">255</span>&amp;e,e&gt;&gt;&gt;<span class="number">8</span>&amp;<span class="number">255</span>,e&gt;&gt;&gt;<span class="number">16</span>&amp;<span class="number">255</span>,e&gt;&gt;&gt;<span class="number">24</span>&amp;<span class="number">255</span>,<span class="number">255</span>&amp;i,i&gt;&gt;&gt;<span class="number">8</span>&amp;<span class="number">255</span>,i&gt;&gt;&gt;<span class="number">16</span>&amp;<span class="number">255</span>,i&gt;&gt;&gt;<span class="number">24</span>&amp;<span class="number">255</span>]&#125;,t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">array</span>=t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">digest</span>,t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">arrayBuffer</span>=<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="variable language_">this</span>.<span class="title function_">finalize</span>();<span class="keyword">var</span> t=<span class="keyword">new</span> <span class="title class_">ArrayBuffer</span>(<span class="number">16</span>),r=<span class="keyword">new</span> <span class="title class_">Uint32Array</span>(t);<span class="keyword">return</span> r[<span class="number">0</span>]=<span class="variable language_">this</span>.<span class="property">h0</span>,r[<span class="number">1</span>]=<span class="variable language_">this</span>.<span class="property">h1</span>,r[<span class="number">2</span>]=<span class="variable language_">this</span>.<span class="property">h2</span>,r[<span class="number">3</span>]=<span class="variable language_">this</span>.<span class="property">h3</span>,t&#125;,t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">buffer</span>=t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">arrayBuffer</span>,t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">base64</span>=<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="keyword">for</span>(<span class="keyword">var</span> t,r,e,i=<span class="string">&quot;&quot;</span>,s=<span class="variable language_">this</span>.<span class="title function_">array</span>(),h=<span class="number">0</span>;h&lt;<span class="number">15</span>;)t=s[h++],r=s[h++],e=s[h++],i+=l[t&gt;&gt;&gt;<span class="number">2</span>]+l[<span class="number">63</span>&amp;(t&lt;&lt;<span class="number">4</span>|r&gt;&gt;&gt;<span class="number">4</span>)]+l[<span class="number">63</span>&amp;(r&lt;&lt;<span class="number">2</span>|e&gt;&gt;&gt;<span class="number">6</span>)]+l[<span class="number">63</span>&amp;e];<span class="keyword">return</span> t=s[h],i+=l[t&gt;&gt;&gt;<span class="number">2</span>]+l[t&lt;&lt;<span class="number">4</span>&amp;<span class="number">63</span>]+<span class="string">&quot;==&quot;</span>&#125;,(r.<span class="property"><span class="keyword">prototype</span></span>=<span class="keyword">new</span> t).<span class="property">finalize</span>=<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="keyword">if</span>(t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">finalize</span>.<span class="title function_">call</span>(<span class="variable language_">this</span>),<span class="variable language_">this</span>.<span class="property">inner</span>)&#123;<span class="variable language_">this</span>.<span class="property">inner</span>=!<span class="number">1</span>;<span class="keyword">var</span> r=<span class="variable language_">this</span>.<span class="title function_">array</span>();t.<span class="title function_">call</span>(<span class="variable language_">this</span>,<span class="variable language_">this</span>.<span class="property">sharedMemory</span>),<span class="variable language_">this</span>.<span class="title function_">update</span>(<span class="variable language_">this</span>.<span class="property">oKeyPad</span>),<span class="variable language_">this</span>.<span class="title function_">update</span>(r),t.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">finalize</span>.<span class="title function_">call</span>(<span class="variable language_">this</span>)&#125;&#125;;<span class="keyword">var</span> O=<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="keyword">var</span> r=<span class="title function_">B</span>(<span class="string">&quot;hex&quot;</span>);n&amp;&amp;(r=<span class="title function_">g</span>(r)),r.<span class="property">create</span>=<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="keyword">return</span> <span class="keyword">new</span> t&#125;,r.<span class="property">update</span>=<span class="keyword">function</span>(<span class="params">t</span>)&#123;<span class="keyword">return</span> r.<span class="title function_">create</span>().<span class="title function_">update</span>(t)&#125;;<span class="keyword">for</span>(<span class="keyword">var</span> e=<span class="number">0</span>;e&lt;d.<span class="property">length</span>;++e)&#123;<span class="keyword">var</span> i=d[e];r[i]=<span class="title function_">B</span>(i)&#125;<span class="keyword">return</span> r&#125;();O.<span class="property">md5</span>=O,O.<span class="property">md5</span>.<span class="property">hmac</span>=<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="keyword">var</span> t=<span class="title function_">m</span>(<span class="string">&quot;hex&quot;</span>);t.<span class="property">create</span>=<span class="keyword">function</span>(<span class="params">t</span>)&#123;<span class="keyword">return</span> <span class="keyword">new</span> <span class="title function_">r</span>(t)&#125;,t.<span class="property">update</span>=<span class="keyword">function</span>(<span class="params">r,e</span>)&#123;<span class="keyword">return</span> t.<span class="title function_">create</span>(r).<span class="title function_">update</span>(e)&#125;;<span class="keyword">for</span>(<span class="keyword">var</span> e=<span class="number">0</span>;e&lt;d.<span class="property">length</span>;++e)&#123;<span class="keyword">var</span> i=d[e];t[i]=<span class="title function_">m</span>(i)&#125;<span class="keyword">return</span> t&#125;(),o?<span class="variable language_">module</span>.<span class="property">exports</span>=<span class="attr">O</span>:(s.<span class="property">md5</span>=O,f&amp;&amp;<span class="title function_">define</span>(<span class="keyword">function</span>(<span class="params"></span>)&#123;<span class="keyword">return</span> O&#125;))&#125;();</span><br></pre></td></tr></table></figure>



<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ul>
<li><a target="_blank" rel="noopener" href="https://stackoverflow.com/questions/63397714/not-able-to-create-md5-hash-on-cloudflare-worker-script">https://stackoverflow.com/questions/63397714/not-able-to-create-md5-hash-on-cloudflare-worker-script</a></li>
<li><a target="_blank" rel="noopener" href="https://developers.cloudflare.com/workers/runtime-apis/web-crypto/">https://developers.cloudflare.com/workers/runtime-apis/web-crypto/</a></li>
<li><a target="_blank" rel="noopener" href="https://unsplash.com/photos/a-close-up-of-a-laptop-keyboard-and-a-small-piece-of-circuit-board-m587InP07os">https://unsplash.com/photos/a-close-up-of-a-laptop-keyboard-and-a-small-piece-of-circuit-board-m587InP07os</a></li>
</ul>

    </div>

    
    
    

    <footer class="post-footer">
          <div class="post-tags">
              <a href="/tags/cloudflare/" rel="tag"># cloudflare</a>
              <a href="/tags/JavaScript/" rel="tag"># JavaScript</a>
              <a href="/tags/%E5%93%88%E5%B8%8C/" rel="tag"># 哈希</a>
              <a href="/tags/md5/" rel="tag"># md5</a>
          </div>

        

          <div class="post-nav">
            <div class="post-nav-item">
                <a href="/post/20240712-Oracle_qian_bao_wallet_jia_mi_he_mi_ma_xiu_gai/" rel="prev" title="Oracle钱包wallet加密和密码修改">
                  <i class="fa fa-chevron-left"></i> Oracle钱包wallet加密和密码修改
                </a>
            </div>
            <div class="post-nav-item">
            </div>
          </div>
    </footer>
  </article>
</div>






    
  <div class="comments" id="disqus_thread">
    <noscript>Please enable JavaScript to view the comments powered by Disqus.</noscript>
  </div>
  
</div>
  </main>

  <footer class="footer">
    <div class="footer-inner">


<div class="copyright">
  &copy; 
  <span itemprop="copyrightYear">2024</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">JackCh3n</span>
</div>
<div class="busuanzi-count">
    <span class="post-meta-item" id="busuanzi_container_site_uv">
      <span class="post-meta-item-icon">
        <i class="fa fa-user"></i>
      </span>
      <span class="site-uv" title="Total Visitors">
        <span id="busuanzi_value_site_uv"></span>
      </span>
    </span>
    <span class="post-meta-item" id="busuanzi_container_site_pv">
      <span class="post-meta-item-icon">
        <i class="fa fa-eye"></i>
      </span>
      <span class="site-pv" title="Total Views">
        <span id="busuanzi_value_site_pv"></span>
      </span>
    </span>
</div>
  <div class="powered-by">Powered by <a href="https://hexo.io/" rel="noopener" target="_blank">Hexo</a> & <a href="https://theme-next.js.org/" rel="noopener" target="_blank">NexT.Gemini</a>
  </div>
    <br/>Powerful CDN service provided by 
  <a target="_blank" rel="noopener" href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral" style="border:none"><img src="https://www.wulihub.com.cn/gc/Wez0VG/images/upyun_logo.png" height="66" style="display: list-item;" alt="upyun"></a> 
  <a target="_blank" rel="noopener" href="https://www.jsdelivr.com" style="border:none"><img src="https://www.wulihub.com.cn/gc/Wez0VG/images/jsdelivr_logo.svg" height="50" style="display: list-item;" alt="JsDelivr"></a>
  <p>
  <br/><a target="_blank" rel="noopener" href="https://pages.github.com/?f=nobige">Github Pages</a>&nbsp;&nbsp;<a target="_blank" rel="noopener" href="https://vercel.com/?f=nobige">Vercel</a>&nbsp;&nbsp;<a target="_blank" rel="noopener" href="https://www.netlify.com/?f=nobige">Netlify</a>&nbsp;&nbsp;<a target="_blank" rel="noopener" href="https://coding.net/?f=nobige">coding</a>&nbsp;&nbsp;provides static publishing
  </p>

    </div>
  </footer>

  
  <script src="https://npm.elemecdn.com/animejs@3.2.1/lib/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous"></script>
<script src="https://www.wulihub.com.cn/gc/Wez0VG/js/comments.js"></script><script src="https://www.wulihub.com.cn/gc/Wez0VG/js/utils.js"></script><script src="https://www.wulihub.com.cn/gc/Wez0VG/js/motion.js"></script><script src="https://www.wulihub.com.cn/gc/Wez0VG/js/next-boot.js"></script>

  
<script src="https://npm.elemecdn.com/hexo-generator-searchdb@1.4.0/dist/search.js" integrity="sha256-vXZMYLEqsROAXkEw93GGIvaB2ab+QW6w3+1ahD9nXXA=" crossorigin="anonymous"></script>
<script src="https://www.wulihub.com.cn/gc/Wez0VG/js/third-party/search/local-search.js"></script>





  
  <script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>




<link rel="stylesheet" href="https://npm.elemecdn.com/disqusjs@1.3.0/dist/disqusjs.css" integrity="sha256-GxdCIOyfxQ1OBfS99qAIJDoGK1ADuBsxhMTqXG82fAY=" crossorigin="anonymous">

<script class="next-config" data-name="disqusjs" type="application/json">{"enable":true,"api":"https://duosuo.nobige.cn/","apikey":"Kmo9kPwsir7ppp8tGpeGROCmUtW8tdZBOdBVowPC67xVfTS5uV1wr6s4kckvP95m","shortname":"nobige","js":{"url":"https://npm.elemecdn.com/disqusjs@1.3.0/dist/disqus.js","integrity":"sha256-LVaMHPQ2zLqOc5rXSAfr4d1PIkEGNLyyUTDNPZmTtUw="}}</script>
<script src="https://www.wulihub.com.cn/gc/Wez0VG/js/third-party/comments/disqusjs.js"></script>

</body>
</html>
